// db.js
const mysql = require('mysql2'); // 必须带 /promise

// 导入表结构
const tableDefinitaions = require('./tables');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'alzys',
});

/**
 * 执行建表SQL的通用函数
 * @param {string} sql 建表SQL语句
 * @param {function} callback 回调函数
 */
function createTable(sql, callback) {
  pool.getConnection((err,connection) => {
    if (err) {
      console.error('数据库连接失败:', err);
      callback(err);
      return;
    }
    connection.query(sql, (err, results) => {
      if (err) {
        console.error('建表失败:', err);
      }
      connection.release();
      callback(err, results);
    })
  })
}

/**
 * 初始化数据库，依次创建所有表
 * @param {function} callback 全部完成后的回调
 */
function initDatabase(callback) {
  let index = 0;
  function next() {
    if (index < tableDefinitaions.length) {
      const table = tableDefinitaions[index];
      console.log(`正在创建表: ${table.name}`)
      createTable(table.sql, (err) => {
        if (err) {
          console.error(`创建表 ${table.name} 失效`);
        } else {
          console.log(`表 ${table.name} 已存在或创建成功`);
        }
        index++;
        next();
      });
    } else {
      if (callback) callback();
    }
  }
  next();
}

// 测试连接（验证 Promise 模式）
(async () => {
  try {
    console.log('✅ 数据库连接成功（Promise 模式）');
  } catch {
    console.error('❌ 数据库连接失败:');
  }
})();

module.exports = {
  pool: pool.promise(),
  initDatabase
};